package com.AdvancedDemos.单元测试_反射_注解.单元测试;

import junit.framework.Assert;
import org.junit.Test;

public class 单元测试 {
    public static void main(String[] args) {

    }

    /**
     * 单元测试：专门用于测试类的方法的！
     * 当所有类的所有方法均测试通过后，再去执行main方法，真正地运行整个程序！
     * 测试方法一般以test开头,必须:公共、无参、无返回值
     * <p>
     * 断言：意思是程序员可以预测程序的运行结果，检查程序的运行结果是否与预期一致
     * Assert类：用于预测代码执行是否正确
     */


    /* 问:为什么有了main方法还需要单元测试?
     * 答:
     * main方法是程序的入口，与单元测试不同，不用于测试某个类的某个方法。
     * main方法一旦执行代表  整个程序运转起来了，程序启动了，代码停不下来了...
     */
    @Test
    public void testEat() {
        Person person = new Person();
        person.eat();
    }

    @Test
    public void testSleep() {
        Student student = new Student();
        student.sleep();
    }

    @Test
    public void testGetStringMaxIndex() {

        Person p = new Person();
        int maxIndex = p.getStringMaxIndex("i love java and i love coding");
        //断言：预期值是否与实际数值相同。相同通过，不相同测试不通过，报红
        Assert.assertEquals(28, maxIndex);
    }


}

class Person {
    public void eat() {
        System.out.println("吃饭");
    }

    /**
     * 获取指定字符串的最大索引
     *
     * @param data 要判断索引的字符串
     * @return 该字符串对应的索引
     */
    public int getStringMaxIndex(String data) {
        if (data == null) {
            return -1;
        }
        return data.length();
    }
}

class Student {
    public void sleep() {
        System.out.println("睡觉");
    }
}

